package org.codingq92.basic.thread;

/**
 * wait/sleep的区别？<br/>
 * <p>
 * 整体的区别其实是有四个：<br/>
 * 1、所属类不同：sleep是线程中的方法，但是wait是Object中的方法。<br/>
 * 2、语法不同：sleep方法不依赖于同步器synchronized，但是wait需要依赖synchronized关键字。<br/>
 * 3、参数不同：sleep必须设置参数时间，wait可以不设置时间，不设置将一直休眠。<br/>
 * 4、释放锁资源不同：sleep方法不会释放lock，但是wait会释放，而且会加入到等待队列中。<br/>
 * 5、唤醒方式不同：sleep不需要被唤醒（休眠之后推出阻塞），但是wait需要（不指定时间需要被别人中断）。<br/>
 * 6、线程进入状态不同：调用 sleep 方法线程会进入TIMED_WAITING 有时限等待状态，而调用无参数的 wait 方法，线程会进入WAITING 无时限等待状态。<br/>
 *
 * @author: CodingQ92
 * @date: 2025/6/3 23:22
 */
public class WaitAndSleep {

    private static final Object sync = new Object();

    public static void main(String[] args) throws InterruptedException {
        Thread.sleep(1000);
        synchronized (sync) {
//            sync.wait(); // 会一直睡下去
            sync.wait(2000); // 睡眠2秒
        }
    }
}
